#!/usr/bin/env python
# -*- coding: utf-8 -*-
#
# Copyright 2010 GMF UFCG
#
# @author eduardojmc@gmail.com
# @author outrodesenvolvedor@gmail.com
#
# Módulo que facilita  execução de comandos shell em pipe.  
#

import os
import subprocess
import sys




def RunPiped(*commands) :
    """Executa uma lista decomandos em pipe e retorna uma tupla com stdout e
    stderr.

    stdout é a saida normal do processo executado.
    stderr é a saída de erro do processo executado.
    """
    if len(commands) == 0:
        return ""
    
    subprocs = []
    for i in xrange(len(commands)):
        if(i == 0):
            subproc_input = None
        else:
            subproc_input = subprocs[i - 1].stdout
            
        new_subproc = subprocess.Popen(commands[i], stdin=subproc_input, stdout=subprocess.PIPE, env=os.environ) 
        subprocs.append(new_subproc)
    
    stdout, stderr = subprocs[len(commands) - 1].communicate()
    return stdout, stderr
    
    





    
if __name__ == "__main__":
    print """
          #!/usr/bin/env python
          import shell

          # - o comando 'du -ha' lista os arquivos e seus tamanhos
          # - o comando 'grep .py$' filtra a saida do programa anterior, e deixa
          #   passar apenas linhas que terminem com .py
          # - o comando abaixo é o equivalente a executar 'du -ha | grep .py$'
          #   no linux

          stdout, stderr = RunPiped( ['du', '-ha'], ['grep', '.py$'] )
          print stdout
          """


    stdout, stderr = RunPiped( ['du', '-ha'], ['grep', '.py$'] )
    print stdout
